home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / mips / include / asm / stacktrace.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.1 KB  |  49 lines

  1. #ifndef _ASM_STACKTRACE_H
  2. #define _ASM_STACKTRACE_H
  3.  
  4. #include <asm/ptrace.h>
  5.  
  6. #ifdef CONFIG_KALLSYMS
  7. extern int raw_show_trace;
  8. extern unsigned long unwind_stack(struct task_struct *task, unsigned long *sp,
  9.                   unsigned long pc, unsigned long *ra);
  10. #else
  11. #define raw_show_trace 1
  12. static inline unsigned long unwind_stack(struct task_struct *task,
  13.     unsigned long *sp, unsigned long pc, unsigned long *ra)
  14. {
  15.     return 0;
  16. }
  17. #endif
  18.  
  19. static __always_inline void prepare_frametrace(struct pt_regs *regs)
  20. {
  21. #ifndef CONFIG_KALLSYMS
  22.     /*
  23.      * Remove any garbage that may be in regs (specially func
  24.      * addresses) to avoid show_raw_backtrace() to report them
  25.      */
  26.     memset(regs, 0, sizeof(*regs));
  27. #endif
  28.     __asm__ __volatile__(
  29.         ".set push\n\t"
  30.         ".set noat\n\t"
  31. #ifdef CONFIG_64BIT
  32.         "1: dla $1, 1b\n\t"
  33.         "sd $1, %0\n\t"
  34.         "sd $29, %1\n\t"
  35.         "sd $31, %2\n\t"
  36. #else
  37.         "1: la $1, 1b\n\t"
  38.         "sw $1, %0\n\t"
  39.         "sw $29, %1\n\t"
  40.         "sw $31, %2\n\t"
  41. #endif
  42.         ".set pop\n\t"
  43.         : "=m" (regs->cp0_epc),
  44.         "=m" (regs->regs[29]), "=m" (regs->regs[31])
  45.         : : "memory");
  46. }
  47.  
  48. #endif /* _ASM_STACKTRACE_H */
  49.